GDIR=../..

## Get files, includes and libraries needed for GIMI
include $(GDIR)/GIMI/Makefile.gimi

CC=gcc
CXX=g++
CFLAGS=-Wall $(DEBUG) $(DEFINITIONS) $(CINCLUDES) $(CMISCFLAGS)
CPPFLAGS=-Wall  $(DEBUG) $(CPPINCLUDES) $(DEFINITIONS) $(CPPMISCFLAGS)
DEBUG=-O0 -g3
CMISCFLAGS=
CPPMISCFLAGS=-Weffc++ -DGIMI_CLIENT_API=10403
DEFINITIONS=-DLINUX_OS
CINCLUDES=-I. $(INCGIMI)
CPPINCLUDES=-I. $(INCGIMI)

LD=g++
LDFLAGS=
LIBS=$(LIBSGIMI)

SRCSC=
SRCSCPP=
SRCSERVICE=gimiservicetutorial.cpp
SRCSUBSCRIBER=gimisubscribertutorial.cpp
SRCMISC=gimimisctutorial.cpp
SRCSET=gimisettingstutorial.cpp
SRCREDIR=gimiredirectiontutorial.cpp
SRCRECEIVE=gimisimplereceiver.cpp
SRCSEND=gimisimplesender.cpp

## Construct final lists of CPP and C objects
# Common objects
OBJSC=$(SRCSC:.c=.o) $(CGIMI:.c=.o)
OBJSCPP=$(SRCSCPP:.cpp=.opp) $(CPPGIMI:.cpp=.opp)

# Objects for different executables
OBJSERVICE=$(SRCSERVICE:.cpp=.opp)
OBJSUBSCRIBER=$(SRCSUBSCRIBER:.cpp=.opp)
OBJMISC=$(SRCMISC:.cpp=.opp)
OBJSET=$(SRCSET:.cpp=.opp)
OBJREDIR=$(SRCREDIR:.cpp=.opp)
OBJRECEIVE=$(SRCRECEIVE:.cpp=.opp)
OBJSEND=$(SRCSEND:.cpp=.opp)

## Define compiles and links
COMPILEC=$(CC) $(CFLAGS) $(CINCLUDES) -c
COMPILECPP=$(CXX) $(CPPFLAGS) $(CPPINCLUDES) -c
LINK=$(LD) $(LDFLAGS) $(LIBS)

.PHONY: all clean

all: gimiservicetutorial gimisubscribertutorial gimimisctutorial gimisettingstutorial \
gimiredirectiontutorial gimisimplereceiver gimisimplesender

gimiservicetutorial: $(OBJSC) $(OBJSCPP) $(OBJSERVICE)
	$(LINK) -o $@ $(OBJSC) $(OBJSCPP) $(OBJSERVICE)

gimisubscribertutorial: $(OBJSC) $(OBJSCPP) $(OBJSUBSCRIBER)
	$(LINK) -o $@ $(OBJSC) $(OBJSCPP) $(OBJSUBSCRIBER)

gimimisctutorial: $(OBJSC) $(OBJSCPP) $(OBJMISC)
	$(LINK) -o $@ $(OBJSC) $(OBJSCPP) $(OBJMISC)

gimisettingstutorial: $(OBJSC) $(OBJSCPP) $(OBJSET)
	$(LINK) -o $@ $(OBJSC) $(OBJSCPP) $(OBJSET)

gimiredirectiontutorial: $(OBJSC) $(OBJSCPP) $(OBJREDIR)
	$(LINK) -o $@ $(OBJSC) $(OBJSCPP) $(OBJREDIR)
	
gimisimplereceiver: $(OBJSC) $(OBJSCPP) $(OBJRECEIVE)
	$(LINK) -o $@ $(OBJSC) $(OBJSCPP) $(OBJRECEIVE)

gimisimplesender: $(OBJSC) $(OBJSCPP) $(OBJSEND)
	$(LINK) -o $@ $(OBJSC) $(OBJSCPP) $(OBJSEND)

clean:
	rm -f $(OBJSUBSCRIBER) $(OBJSERVICE) $(OBJMISC) $(OBJSET) $(OBJSC) \
$(OBJSCPP) $(OBJREDIR) gimiservicetutorial gimisubscribertutorial \
gimimisctutorial gimisettingstutorial gimisimplereceiver gimisimplesender \
*.out *~ *.d *.dpp

## Below this is dependency generation stuff, no need to change.
## Compile rule for all .o (.c) file
%.o:    %.c
				$(COMPILEC) -o $@ $<

## Compile rule for all .opp (.cpp) files
%.opp:	%.cpp
				$(COMPILECPP) -o $@ $<

## Dependency generation rule: For all required '.d' files
%.d:	  %.c
				$(CC) -MM $(CFLAGS) $< > $@.$$$$; \
				sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
				rm -f $@.$$$$

## Dependency generation rule: For all required '.dpp' files
%.dpp:	%.cpp
				$(CXX) -MM $(CPPFLAGS) $< > $@.$$$$; \
				sed 's,\($*\)\.o[ :]*,\1.opp $@ : ,g' < $@.$$$$ > $@; \
				rm -f $@.$$$$

%.h:	%.h

# Include dependency rules
-include $(SRCSCPP:.cpp=.dpp)
-include $(SRCSC:.c=.d)
